The world cup 2022 will be hosted by Qatar in 2022. We wanted to try
and predict which country has the biggest probability of winning the
tournament by using supervised learning.
1. Data
The data that we will be using is already cleaned and does not
require pre-processing.
The data set provides a complete overview of all international
football matches played since the 90s. On top of that, the strength of
each team is provided by incorporating the FIFA rankings as well as
player strengths based on the EA Sport FIFA video game. It is available
on kaggle
Variables
date : date of the match
home_team : name of the home team
away_team : name of the away team
home_team_continent : continent of the home team
away_team_continent : continent of the away team
home_team_fifa_rank : FIFA rank of the home team when
the match took place
away_team_fifa_rank : FIFA rank of the away team when
the match took place
home_team_total_fifa_points : total number of FIFA
points of the home team at the time of the match
away_team_total_fifa_points : total number of FIFA
points of the away team at the time of the match
home_team_score : full-time home score (excluding
penalty shootout)
away_team_score : full-time away score (excluding
penalty shootout)
tournament : name of tournament
city : name of the city where the match was played
country : name of the country where the match was
played
neutral_location :
TRUE : the match was played at a neutral venue
shoot_out:
TRUE : the match included a penalty shootout
home_team_result : result of the home team (including
penalty shootout)
home_team_goalkeeper_score : FIFA game score of the
highest ranked GK of the home team
away_team_goalkeeper_score : FIFA game score of the
highest ranked GK of the away team
home_team_mean_defense_score : Average FIFA game score
of the 4 highest ranked defensive players of the home team
away_team_mean_defense_score : Average FIFA game score
of the 4 highest ranked defensive players of the away team
home_team_mean_midfield_score : Average FIFA game score
of the 4 highest ranked midfield players of the home team
away_team_mean_midfield_score : Average FIFA game score
of the 4 highest ranked midfield players of the away team
home_team_mean_offense_score : Average FIFA game score
of the 3 highest ranked attacking players of the home team, including
wing players
away_team_mean_offense_score : Average FIFA game score
of the 3 highest ranked attacking players of the away team, including
wing players
2. EDA
spec(input_data)
cols(
date = col_date(format = ""),
home_team = col_character(),
away_team = col_character(),
home_team_continent = col_character(),
away_team_continent = col_character(),
home_team_fifa_rank = col_double(),
away_team_fifa_rank = col_double(),
home_team_total_fifa_points = col_double(),
away_team_total_fifa_points = col_double(),
home_team_score = col_double(),
away_team_score = col_double(),
tournament = col_character(),
city = col_character(),
country = col_character(),
neutral_location = col_logical(),
shoot_out = col_character(),
home_team_result = col_character(),
home_team_goalkeeper_score = col_double(),
away_team_goalkeeper_score = col_double(),
home_team_mean_defense_score = col_double(),
home_team_mean_offense_score = col_double(),
home_team_mean_midfield_score = col_double(),
away_team_mean_defense_score = col_double(),
away_team_mean_offense_score = col_double(),
away_team_mean_midfield_score = col_double()
)
skim_without_charts(input_data)
── Data Summary ────────────────────────
Values
Name input_data
Number of rows 23921
Number of columns 25
_______________________
Column type frequency:
character 9
Date 1
logical 1
numeric 14
________________________
Group variables None
Missing data

Teams with strongest GK

Teams with strongest defense

Teams with strongest midfield

Teams with strongest offense

Is it better to play at home ?

Correlation Matrix

LS0tCnRpdGxlOiAiV29ybGQgQ3VwIDIwMjIiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQoKYGBge3IsIGVjaG89RkFMU0V9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoc2tpbXIpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KHNjYWxlcykKbGlicmFyeShjb3JycGxvdCkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2dhbmltYXRlKQoKYGBgCgpUaGUgd29ybGQgY3VwIDIwMjIgd2lsbCBiZSBob3N0ZWQgYnkgUWF0YXIgaW4gMjAyMi4gV2Ugd2FudGVkIHRvIHRyeSBhbmQgcHJlZGljdAp3aGljaCBjb3VudHJ5IGhhcyB0aGUgYmlnZ2VzdCBwcm9iYWJpbGl0eSBvZiB3aW5uaW5nIHRoZSB0b3VybmFtZW50IGJ5IHVzaW5nIHN1cGVydmlzZWQgbGVhcm5pbmcuCgojIDEuIERhdGEKClRoZSBkYXRhIHRoYXQgd2Ugd2lsbCBiZSB1c2luZyBpcyBhbHJlYWR5IGNsZWFuZWQgYW5kIGRvZXMgbm90IHJlcXVpcmUgcHJlLXByb2Nlc3NpbmcuCgpUaGUgZGF0YSBzZXQgcHJvdmlkZXMgYSBjb21wbGV0ZSBvdmVydmlldyBvZiBhbGwgaW50ZXJuYXRpb25hbCBmb290YmFsbCBtYXRjaGVzIHBsYXllZCBzaW5jZSB0aGUgOTBzLiBPbiB0b3Agb2YgdGhhdCwgdGhlIHN0cmVuZ3RoIG9mIGVhY2ggdGVhbSBpcyBwcm92aWRlZCBieSBpbmNvcnBvcmF0aW5nIHRoZSBGSUZBIHJhbmtpbmdzIGFzIHdlbGwgYXMgcGxheWVyIHN0cmVuZ3RocyBiYXNlZCBvbiB0aGUgRUEgU3BvcnQgRklGQSB2aWRlbyBnYW1lLiBJdCBpcyBhdmFpbGFibGUgb24gW2thZ2dsZV0oaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9kYXRhc2V0cy9icmVuZGE4OS9maWZhLXdvcmxkLWN1cC0yMDIyKQoKIyMgVmFyaWFibGVzCgotIGBkYXRlYCA6IGRhdGUgb2YgdGhlIG1hdGNoCi0gYGhvbWVfdGVhbWAgOiBuYW1lIG9mIHRoZSBob21lIHRlYW0KLSBgYXdheV90ZWFtYCA6IG5hbWUgb2YgdGhlIGF3YXkgdGVhbQotIGBob21lX3RlYW1fY29udGluZW50YCA6IGNvbnRpbmVudCBvZiB0aGUgaG9tZSB0ZWFtCi0gYGF3YXlfdGVhbV9jb250aW5lbnRgIDogY29udGluZW50IG9mIHRoZSBhd2F5IHRlYW0KLSBgaG9tZV90ZWFtX2ZpZmFfcmFua2AgOiBGSUZBIHJhbmsgb2YgdGhlIGhvbWUgdGVhbSB3aGVuIHRoZSBtYXRjaCB0b29rIHBsYWNlCi0gYGF3YXlfdGVhbV9maWZhX3JhbmtgIDogRklGQSByYW5rIG9mIHRoZSBhd2F5IHRlYW0gd2hlbiB0aGUgbWF0Y2ggdG9vayBwbGFjZQotIGBob21lX3RlYW1fdG90YWxfZmlmYV9wb2ludHNgIDogdG90YWwgbnVtYmVyIG9mIEZJRkEgcG9pbnRzIG9mIHRoZSBob21lIHRlYW0gYXQgdGhlIHRpbWUgb2YgdGhlIG1hdGNoCi0gYGF3YXlfdGVhbV90b3RhbF9maWZhX3BvaW50c2AgOiB0b3RhbCBudW1iZXIgb2YgRklGQSBwb2ludHMgb2YgdGhlIGF3YXkgdGVhbSBhdCB0aGUgdGltZSBvZiB0aGUgbWF0Y2gKLSBgaG9tZV90ZWFtX3Njb3JlYCA6IGZ1bGwtdGltZSBob21lIHNjb3JlIChleGNsdWRpbmcgcGVuYWx0eSBzaG9vdG91dCkKLSBgYXdheV90ZWFtX3Njb3JlYCA6IGZ1bGwtdGltZSBhd2F5IHNjb3JlIChleGNsdWRpbmcgcGVuYWx0eSBzaG9vdG91dCkKLSBgdG91cm5hbWVudGAgOiBuYW1lIG9mIHRvdXJuYW1lbnQKLSBgY2l0eWAgOiBuYW1lIG9mIHRoZSBjaXR5IHdoZXJlIHRoZSBtYXRjaCB3YXMgcGxheWVkCi0gYGNvdW50cnlgIDogbmFtZSBvZiB0aGUgY291bnRyeSB3aGVyZSB0aGUgbWF0Y2ggd2FzIHBsYXllZAotIGBuZXV0cmFsX2xvY2F0aW9uYCA6CiAgLSBgVFJVRWAgOiB0aGUgbWF0Y2ggd2FzIHBsYXllZCBhdCBhIG5ldXRyYWwgdmVudWUKLSBgc2hvb3Rfb3V0YDoKICAtIGBUUlVFYCA6IHRoZSBtYXRjaCBpbmNsdWRlZCBhIHBlbmFsdHkgc2hvb3RvdXQKLSBgaG9tZV90ZWFtX3Jlc3VsdGAgOiByZXN1bHQgb2YgdGhlIGhvbWUgdGVhbSAoaW5jbHVkaW5nIHBlbmFsdHkgc2hvb3RvdXQpCi0gYGhvbWVfdGVhbV9nb2Fsa2VlcGVyX3Njb3JlYCA6IEZJRkEgZ2FtZSBzY29yZSBvZiB0aGUgaGlnaGVzdCByYW5rZWQgR0sgb2YgdGhlIGhvbWUgdGVhbQotIGBhd2F5X3RlYW1fZ29hbGtlZXBlcl9zY29yZWAgOiBGSUZBIGdhbWUgc2NvcmUgb2YgdGhlIGhpZ2hlc3QgcmFua2VkIEdLIG9mIHRoZSBhd2F5IHRlYW0KLSBgaG9tZV90ZWFtX21lYW5fZGVmZW5zZV9zY29yZWAgOiBBdmVyYWdlIEZJRkEgZ2FtZSBzY29yZSBvZiB0aGUgNCBoaWdoZXN0IHJhbmtlZCBkZWZlbnNpdmUgcGxheWVycyBvZiB0aGUgaG9tZSB0ZWFtCi0gYGF3YXlfdGVhbV9tZWFuX2RlZmVuc2Vfc2NvcmVgIDogQXZlcmFnZSBGSUZBIGdhbWUgc2NvcmUgb2YgdGhlIDQgaGlnaGVzdCByYW5rZWQgCmRlZmVuc2l2ZSBwbGF5ZXJzIG9mIHRoZSBhd2F5IHRlYW0KLSBgaG9tZV90ZWFtX21lYW5fbWlkZmllbGRfc2NvcmVgIDogQXZlcmFnZSBGSUZBIGdhbWUgc2NvcmUgb2YgdGhlIDQgaGlnaGVzdCByYW5rZWQgbWlkZmllbGQgcGxheWVycyBvZiB0aGUgaG9tZSB0ZWFtCi0gYGF3YXlfdGVhbV9tZWFuX21pZGZpZWxkX3Njb3JlYCA6IEF2ZXJhZ2UgRklGQSBnYW1lIHNjb3JlIG9mIHRoZSA0IGhpZ2hlc3QgcmFua2VkIG1pZGZpZWxkIHBsYXllcnMgb2YgdGhlIGF3YXkgdGVhbQotIGBob21lX3RlYW1fbWVhbl9vZmZlbnNlX3Njb3JlYCA6IEF2ZXJhZ2UgRklGQSBnYW1lIHNjb3JlIG9mIHRoZSAzIGhpZ2hlc3QgcmFua2VkIGF0dGFja2luZyBwbGF5ZXJzIG9mIHRoZSBob21lIHRlYW0sIGluY2x1ZGluZyB3aW5nIHBsYXllcnMKLSBgYXdheV90ZWFtX21lYW5fb2ZmZW5zZV9zY29yZWAgOiBBdmVyYWdlIEZJRkEgZ2FtZSBzY29yZSBvZiB0aGUgMyBoaWdoZXN0IHJhbmtlZCBhdHRhY2tpbmcgcGxheWVycyBvZiB0aGUgYXdheSB0ZWFtLCBpbmNsdWRpbmcgd2luZyBwbGF5ZXJzCgojIDIuIEVEQQoKYGBge3J9CiMgY2xhc3Mgb2YgZWFjaCB2YXJpYWJsZQpzcGVjKGlucHV0X2RhdGEpCmBgYApgYGB7cn0KIyBzdW1tYXJ5CnNraW1fd2l0aG91dF9jaGFydHMoaW5wdXRfZGF0YSkKYGBgCgojIyBNaXNzaW5nIGRhdGEKCmBgYHtyfQppbnB1dF9kYXRhICU+JQogIHN1bW1hcmlzZV9hbGwobGlzdCh+aXMubmEoLikpKSU+JQogIHBpdm90X2xvbmdlcihldmVyeXRoaW5nKCksCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInZhcmlhYmxlcyIsIHZhbHVlc190bz0ibWlzc2luZyIpICU+JQogIGNvdW50KHZhcmlhYmxlcywgbWlzc2luZykgJT4lCiAgZ2dwbG90KGFlcyh5PXZhcmlhYmxlcyx4PW4sZmlsbD1taXNzaW5nKSkrCiAgZ2VvbV9jb2woKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI0EzQkU4QyIsIiNFQkNCOEIiKSkrCiAgdGhlbWUoYXhpcy50aXRsZS55PWVsZW1lbnRfYmxhbmsoKSkKYGBgCgoKIyMgVG9wIDUgdGVhbXMgaW4gMjAyMgoKYGBge3J9CiMgR2V0IHRoZSByYW5raW5nIG9mIGFsbCBob21lIHRlYW1zCmhvbWUgPC0KICBpbnB1dF9kYXRhICU+JSAKICBzZWxlY3QoZGF0ZSwgaG9tZV90ZWFtLCBob21lX3RlYW1fZmlmYV9yYW5rKSAlPiUgCiAgcmVuYW1lKHRlYW0gPSBob21lX3RlYW0sIHJhbmtpbmcgPSBob21lX3RlYW1fZmlmYV9yYW5rKQoKIyBHZXQgdGhlIHJhbmtpbmcgb2YgYWxsIGF3YXkgdGVhbXMKYXdheSA8LQogIGlucHV0X2RhdGEgJT4lIAogIHNlbGVjdChkYXRlLCBhd2F5X3RlYW0sIGF3YXlfdGVhbV9maWZhX3JhbmspICU+JSAKICByZW5hbWUodGVhbSA9IGF3YXlfdGVhbSwgcmFua2luZyA9IGF3YXlfdGVhbV9maWZhX3JhbmspCgojIENvbWJpbmUgYm90aCBkYXRhIGZyYW1lcyBpbnRvIG9uZQpmaWZhX3JhbmtpbmcgPC0gcmJpbmQoaG9tZSwgYXdheSkKCiMgR2V0IHRoZSBsYXRlc3QgcmFua2luZyBvZiBlYWNoIGNvdW50cnkgYmFzZWQgb24gdGhlaXIgbW9zdCByZWNlbnQgbWF0Y2gKbGF0ZXN0X2ZpZmFfcmFua2luZyA8LQogIGZpZmFfcmFua2luZyAlPiUgCiAgYXJyYW5nZSh0ZWFtLCBkZXNjKGRhdGUpKSAlPiUgCiAgZ3JvdXBfYnkodGVhbSkgJT4lIAogIG11dGF0ZShyb3dfbnVtYmVyID0gcm93X251bWJlcih0ZWFtKSkgJT4lIAogIGZpbHRlcihyb3dfbnVtYmVyID09IDEpICU+JSAKICBzZWxlY3QoLXJvd19udW1iZXIsIC1kYXRlKSAlPiUgCiAgYXJyYW5nZShyYW5raW5nKQogIApoZWFkKGxhdGVzdF9maWZhX3JhbmtpbmcsIDEwKQpgYGAKCiMjIEZJRkEgcmFua2luZ3Mgb3ZlciB0aW1lCgpgYGB7cn0KdG9wNV9saXN0IDwtIGhlYWQobGF0ZXN0X2ZpZmFfcmFua2luZywgNSkkdGVhbQoKdG9wNV9yYW5raW5nIDwtCiAgZmlmYV9yYW5raW5nICAlPiUgCiAgZmlsdGVyKHRlYW0gJWluJSB0b3A1X2xpc3QpCgpwIDwtCiAgZ2dwbG90KGRhdGEgPSB0b3A1X3JhbmtpbmcsCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoCiAgICAgICAgICAgeCA9IGRhdGUsCiAgICAgICAgICAgeSA9IHJhbmtpbmcsCiAgICAgICAgICAgZ3JvdXAgPSB0ZWFtLAogICAgICAgICAgIGNvbG9yID0gdGVhbQogICAgICAgICApKSArCiAgZ2VvbV9saW5lKCkgKwogIHNjYWxlX3lfcmV2ZXJzZSgpICsKICBsYWJzKAogICAgeCA9ICJEYXRlIiwKICAgIHkgPSAiRklGQSBSYW5raW5nIiwKICAgIGNvbG9yID0gIlRlYW0iLAogICAgdGl0bGUgPSAiRklGQSBSYW5raW5ncyBvZiB0aGUgMjAyMiBUb3AgNSB0ZWFtcyIKICApCgpnZ3Bsb3RseShwKQoKYGBgCgojIyBUZWFtcyB3aXRoIHN0cm9uZ2VzdCBHSwoKYGBge3J9CiMgR2F0aGVyIGdvYWxrZWVwZXIgZGF0YSBmcm9tIG1hdGNoZXMKZ2tfaG9tZSA8LQogIGlucHV0X2RhdGEgJT4lIAogIHNlbGVjdChkYXRlLCBob21lX3RlYW0sIGhvbWVfdGVhbV9nb2Fsa2VlcGVyX3Njb3JlKSAlPiUgCiAgcmVuYW1lKHRlYW0gPSBob21lX3RlYW0sIGdvYWxrZWVwZXJfcmF0aW5nID0gaG9tZV90ZWFtX2dvYWxrZWVwZXJfc2NvcmUpCgpna19hd2F5IDwtCiAgaW5wdXRfZGF0YSAlPiUgCiAgc2VsZWN0KGRhdGUsIGF3YXlfdGVhbSwgYXdheV90ZWFtX2dvYWxrZWVwZXJfc2NvcmUpICU+JSAKICByZW5hbWUodGVhbSA9IGF3YXlfdGVhbSwgZ29hbGtlZXBlcl9yYXRpbmcgPSBhd2F5X3RlYW1fZ29hbGtlZXBlcl9zY29yZSkKCmdrX3JhdGluZyA8LSBkcm9wX25hKHJiaW5kKGdrX2hvbWUsIGdrX2F3YXkpKQoKIyBHZXQgbGF0ZXN0IHJhdGluZyBvZiBlYWNoIHRlYW0ncyBnb2Fsa2VlcGVyIGFuZCBzaG93IHRvcCAxMApsYXRlc3RfZ2tfcmF0aW5nIDwtCiAgZ2tfcmF0aW5nICU+JSAKICBhcnJhbmdlKHRlYW0sIGRlc2MoZGF0ZSkpICU+JSAKICBncm91cF9ieSh0ZWFtKSAlPiUgCiAgbXV0YXRlKHJvd19udW1iZXIgPSByb3dfbnVtYmVyKHRlYW0pKSAlPiUgCiAgZmlsdGVyKHJvd19udW1iZXIgPT0gMSkgJT4lIAogIHNlbGVjdCgtcm93X251bWJlciwgLWRhdGUpICU+JSAKICBhcnJhbmdlKC1nb2Fsa2VlcGVyX3JhdGluZykKCmdncGxvdChkYXRhID0gaGVhZChsYXRlc3RfZ2tfcmF0aW5nLCAxMCksIG1hcHBpbmcgPSBhZXMoeD1nb2Fsa2VlcGVyX3JhdGluZywgeT1yZW9yZGVyKHRlYW0sIGdvYWxrZWVwZXJfcmF0aW5nKSwgbGFiZWw9Z29hbGtlZXBlcl9yYXRpbmcpKSArCiAgZ2VvbV9jb2woZmlsbD0iIzg4QzBEMCIpICsKICBnZW9tX3RleHQocG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpICsKICBsYWJzKHRpdGxlID0gIlRvcCAxMCB0ZWFtcyB3aXRoIHRoZSBzdHJvbmdlc3QgZ29hbGtlZXBlciIsCiAgICAgICBzdWJ0aXRsZSA9ICJCYXNlZCBvbiB0aGUgaGlnaGVzdCByYXRlZCBnb2Fsa2VlcGVyIG9mIGVhY2ggdGVhbSIsCiAgICAgICB4PSJHb2Fsa2VlcGVyIFJhdGluZyIsCiAgICAgICB5PSJDb3VudHJ5IikKYGBgCiMjIyBUZWFtcyB3aXRoIHN0cm9uZ2VzdCBkZWZlbnNlCgpgYGB7cn0KIyBHYXRoZXIgZ29hbGtlZXBlciBhbmQgZGVmZW5zZSBkYXRhIGZyb20gbWF0Y2hlcwpkZWZfaG9tZSA8LQogIGlucHV0X2RhdGEgJT4lIAogIHNlbGVjdChkYXRlLCBob21lX3RlYW0sIGhvbWVfdGVhbV9nb2Fsa2VlcGVyX3Njb3JlLCBob21lX3RlYW1fbWVhbl9kZWZlbnNlX3Njb3JlKSAlPiUgCiAgcmVuYW1lKHRlYW0gPSBob21lX3RlYW0sIGdvYWxrZWVwZXJfcmF0aW5nID0gaG9tZV90ZWFtX2dvYWxrZWVwZXJfc2NvcmUsIG1lYW5fZGVmZW5zZV9yYXRpbmcgPSBob21lX3RlYW1fbWVhbl9kZWZlbnNlX3Njb3JlKQoKZGVmX2F3YXkgPC0KICBpbnB1dF9kYXRhICU+JSAKICBzZWxlY3QoZGF0ZSwgYXdheV90ZWFtLCBhd2F5X3RlYW1fZ29hbGtlZXBlcl9zY29yZSwgYXdheV90ZWFtX21lYW5fZGVmZW5zZV9zY29yZSkgJT4lIAogIHJlbmFtZSh0ZWFtID0gYXdheV90ZWFtLCBnb2Fsa2VlcGVyX3JhdGluZyA9IGF3YXlfdGVhbV9nb2Fsa2VlcGVyX3Njb3JlLCBtZWFuX2RlZmVuc2VfcmF0aW5nID0gYXdheV90ZWFtX21lYW5fZGVmZW5zZV9zY29yZSkKCmRlZl9yYXRpbmcgPC0gZHJvcF9uYShyYmluZChkZWZfaG9tZSwgZGVmX2F3YXkpKQoKIyBHZXQgbGF0ZXN0IGNvbWJpbmVkIHJhdGluZyBvZiBlYWNoIHRlYW0gYW5kIHNob3cgdG9wIDEwCmxhdGVzdF9kZWZfcmF0aW5nIDwtCiAgZGVmX3JhdGluZyAlPiUgCiAgYXJyYW5nZSh0ZWFtLCBkZXNjKGRhdGUpKSAlPiUgCiAgbXV0YXRlKHRvdGFsX2RlZiA9IGdvYWxrZWVwZXJfcmF0aW5nICsgbWVhbl9kZWZlbnNlX3JhdGluZykgJT4lIAogIGdyb3VwX2J5KHRlYW0pICU+JSAKICBtdXRhdGUocm93X251bWJlciA9IHJvd19udW1iZXIodGVhbSkpICU+JSAKICBmaWx0ZXIocm93X251bWJlcj09MSkgJT4lIAogIGFycmFuZ2UoLXRvdGFsX2RlZikgJT4lIAogIHNlbGVjdCgtcm93X251bWJlciwgLWRhdGUpCgpnZ3Bsb3QoZGF0YSA9IGhlYWQobGF0ZXN0X2RlZl9yYXRpbmcsIDEwKSwgbWFwcGluZz1hZXMoeD10b3RhbF9kZWYsIHk9cmVvcmRlcih0ZWFtLCB0b3RhbF9kZWYpLCBsYWJlbD10b3RhbF9kZWYpKSArIAogIGdlb21fY29sKGZpbGw9IiM4OEMwRDAiKSArCiAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJUb3AgMTAgdGVhbXMgd2l0aCB0aGUgc3Ryb25nZXN0IGRlZmVuc2UiLAogICAgICAgc3VidGl0bGUgPSAiQmFzZWQgb24gZ29hbGtlZXBlciBhbmQgbWVhbiBkZWZlbnNlIHJhdGluZ3MiLAogICAgICAgeCA9ICJUb3RhbCBEZWZlbnNlIFJhdGluZyIsCiAgICAgICB5ID0gIlRlYW1zIikgCmBgYAoKIyMjIFRlYW1zIHdpdGggc3Ryb25nZXN0IG1pZGZpZWxkCgpgYGB7cn0KbWlkX2hvbWUgPC0KICBpbnB1dF9kYXRhICU+JSAKICBzZWxlY3QoZGF0ZSwgaG9tZV90ZWFtLCBob21lX3RlYW1fbWVhbl9taWRmaWVsZF9zY29yZSkgJT4lIAogIHJlbmFtZSh0ZWFtID0gaG9tZV90ZWFtLCBtaWRmaWVsZF9yYXRpbmcgPSBob21lX3RlYW1fbWVhbl9taWRmaWVsZF9zY29yZSkKCm1pZF9hd2F5IDwtCiAgaW5wdXRfZGF0YSAlPiUgCiAgc2VsZWN0KGRhdGUsIGF3YXlfdGVhbSwgYXdheV90ZWFtX21lYW5fbWlkZmllbGRfc2NvcmUpICU+JSAKICByZW5hbWUodGVhbSA9IGF3YXlfdGVhbSwgbWlkZmllbGRfcmF0aW5nID0gYXdheV90ZWFtX21lYW5fbWlkZmllbGRfc2NvcmUpCgptaWRfcmF0aW5nIDwtIGRyb3BfbmEocmJpbmQobWlkX2hvbWUsIG1pZF9hd2F5KSkKCiMgR2V0IGxhdGVzdCBtaWRmaWVsZCByYXRpbmcgb2YgZWFjaCB0ZWFtIGFuZCBzaG93IHRvcCAxMApsYXRlc3RfbWlkX3JhdGluZyA8LQogIG1pZF9yYXRpbmcgJT4lIAogIGFycmFuZ2UodGVhbSwgZGVzYyhkYXRlKSkgJT4lIAogIGdyb3VwX2J5KHRlYW0pICU+JSAKICBtdXRhdGUocm93X251bWJlciA9IHJvd19udW1iZXIodGVhbSkpICU+JSAKICBmaWx0ZXIocm93X251bWJlciA9PSAxKSAlPiUgCiAgYXJyYW5nZSgtbWlkZmllbGRfcmF0aW5nKSAlPiUgCiAgc2VsZWN0KC1kYXRlLCAtcm93X251bWJlcikKCmdncGxvdChkYXRhID0gaGVhZChsYXRlc3RfbWlkX3JhdGluZywgMTApLCBtYXBwaW5nPWFlcyh4PW1pZGZpZWxkX3JhdGluZywgeT1yZW9yZGVyKHRlYW0sIG1pZGZpZWxkX3JhdGluZyksIGxhYmVsPW1pZGZpZWxkX3JhdGluZykpICsgCiAgZ2VvbV9jb2woZmlsbD0gIiM4OEMwRDAiKSArCiAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJUb3AgMTAgdGVhbXMgd2l0aCB0aGUgc3Ryb25nZXN0IG1pZGZpZWxkIiwKICAgICAgIHN1YnRpdGxlID0gIkJhc2VkIG9uIHRoZSBhdmVyYWdlIHJhdGluZyBvZiB0aGUgNCBoaWdoZXN0IHJhdGVkIG1pZGZpZWxkIHBsYXllcnMgb2YgZWFjaCB0ZWFtIiwKICAgICAgIHggPSAiTWlkZmllbGQgUmF0aW5nIiwKICAgICAgIHkgPSAiVGVhbXMiKQpgYGAKCiMjIyBUZWFtcyB3aXRoIHN0cm9uZ2VzdCBvZmZlbnNlCgpgYGB7cn0Kb2ZmX2hvbWUgPC0KICBpbnB1dF9kYXRhICU+JSAKICBzZWxlY3QoZGF0ZSwgaG9tZV90ZWFtLCBob21lX3RlYW1fbWVhbl9vZmZlbnNlX3Njb3JlKSAlPiUgCiAgcmVuYW1lKHRlYW0gPSBob21lX3RlYW0sIG9mZmVuc2VfcmF0aW5nID0gaG9tZV90ZWFtX21lYW5fb2ZmZW5zZV9zY29yZSkKCm9mZl9hd2F5IDwtCiAgaW5wdXRfZGF0YSAlPiUgCiAgc2VsZWN0KGRhdGUsIGF3YXlfdGVhbSwgYXdheV90ZWFtX21lYW5fb2ZmZW5zZV9zY29yZSkgJT4lIAogIHJlbmFtZSh0ZWFtID0gYXdheV90ZWFtLCBvZmZlbnNlX3JhdGluZyA9IGF3YXlfdGVhbV9tZWFuX29mZmVuc2Vfc2NvcmUpCgpvZmZfcmF0aW5nIDwtIGRyb3BfbmEocmJpbmQob2ZmX2hvbWUsIG9mZl9hd2F5KSkKCiMgR2V0IGxhdGVzdCBvZmZlbnNlIHJhdGluZyBvZiBlYWNoIHRlYW0gYW5kIHNob3cgdG9wIDEwCmxhdGVzdF9vZmZfcmF0aW5nIDwtCiAgb2ZmX3JhdGluZyAlPiUgCiAgYXJyYW5nZSh0ZWFtLCBkZXNjKGRhdGUpKSAlPiUgCiAgZ3JvdXBfYnkodGVhbSkgJT4lIAogIG11dGF0ZShyb3dfbnVtYmVyID0gcm93X251bWJlcih0ZWFtKSkgJT4lIAogIGZpbHRlcihyb3dfbnVtYmVyID09IDEpICU+JSAKICBhcnJhbmdlKC1vZmZlbnNlX3JhdGluZykgJT4lIAogIHNlbGVjdCgtZGF0ZSwgLXJvd19udW1iZXIpCgpnZ3Bsb3QoZGF0YSA9IGhlYWQobGF0ZXN0X29mZl9yYXRpbmcsIDEwKSwgbWFwcGluZz1hZXMoeD1vZmZlbnNlX3JhdGluZywgeT1yZW9yZGVyKHRlYW0sIG9mZmVuc2VfcmF0aW5nKSwgbGFiZWw9b2ZmZW5zZV9yYXRpbmcpKSArCiAgZ2VvbV9jb2woZmlsbD0iIzg4QzBEMCIpICsKICBnZW9tX3RleHQocG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpICsKICBsYWJzKHRpdGxlPSJUb3AgMTAgdGVhbXMgd2l0aCB0aGUgc3Ryb25nZXN0IG9mZmVuc2UiLAogICAgICBzdWJ0aXRsZT0iQmFzZWQgb24gdGhlIGF2ZXJhZ2UgcmF0aW5nIG9mIHRoZSAzIGhpZ2hlc3QgcmF0ZWQgb2ZmZW5zaXZlIHBsYXllcnMgb2YgZWFjaCB0ZWFtIiwKICAgICAgeD0iT2ZmZW5zZSBSYXRpbmciLAogICAgICB5PSJUZWFtcyIpCmBgYAoKIyMgSXMgaXQgYmV0dGVyIHRvIHBsYXkgYXQgaG9tZSA/CgpgYGB7cn0KaG9tZV90ZWFtX2FkdmFudGFnZSA8LQogIGlucHV0X2RhdGEgJT4lIAogIGZpbHRlcihuZXV0cmFsX2xvY2F0aW9uID09IEZBTFNFKSAlPiUgCiAgY291bnQoaG9tZV90ZWFtX3Jlc3VsdCkgJT4lIAogIG11dGF0ZShwZXJjZW50YWdlID0gbGFiZWxfcGVyY2VudCgpKG4vc3VtKG4pKSkKCmdncGxvdChkYXRhID0gaG9tZV90ZWFtX2FkdmFudGFnZSwgbWFwcGluZz1hZXMoeD0iIiwgeT1uLCBmaWxsPWhvbWVfdGVhbV9yZXN1bHQpKSArCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IiwgY29sb3I9IndoaXRlIikgKwogIGNvb3JkX3BvbGFyKCJ5IikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNFQkNCOEIiLCAiI0JGNjE2QSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0EzQkU4QyIpKQogIHRoZW1lX3ZvaWQoKSArCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidXRpb24gb2YgbWF0Y2ggcmVzdWx0cyBvZiBob21lIHRlYW1zIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBtYXRjaGVzIHBsYXllZCBhdCBuZXV0cmFsIGxvY2F0aW9ucyIsCiAgICAgICBmaWxsPSJSZXN1bHQiKQpgYGAKCiMjIENvcnJlbGF0aW9uIE1hdHJpeAoKYGBge3J9CiMgc2VsZWN0IG51bWVyaWMgY29sdW1ucyBvbmx5CmlucHV0X251bWVyaWNfZGF0YSA8LSBpbnB1dF9kYXRhICU+JQogIHNlbGVjdF9pZihpcy5udW1lcmljKSAlPiUKICBkcm9wX25hKCkKCiMgcmVuYW1lIHZhcmlhYmxlcyBmb3IgZWFzaWVyIGNvcnJlbGF0aW9uIHBsb3QgdmlzdWFsaXphdGlvbgppbnB1dF9udW1lcmljX2RhdGEgPC0gaW5wdXRfbnVtZXJpY19kYXRhICU+JSByZW5hbWUoCiAgcmFuazEgPSBob21lX3RlYW1fZmlmYV9yYW5rLAogIHJhbmsyID0gYXdheV90ZWFtX2ZpZmFfcmFuaywKICB0b3RhbF9maWZhX3BvaW50czEgPSBob21lX3RlYW1fdG90YWxfZmlmYV9wb2ludHMsCiAgdG90YWxfZmlmYV9wb2ludHMyID0gYXdheV90ZWFtX3RvdGFsX2ZpZmFfcG9pbnRzLAogIHNjb3JlMSA9IGhvbWVfdGVhbV9zY29yZSwKICBzY29yZTIgPSBhd2F5X3RlYW1fc2NvcmUsCiAgZ2tfc2NvcmUxID0gaG9tZV90ZWFtX2dvYWxrZWVwZXJfc2NvcmUsCiAgZ2tfc2NvcmUyID0gYXdheV90ZWFtX2dvYWxrZWVwZXJfc2NvcmUsCiAgZGZfc2NvcmUxID0gaG9tZV90ZWFtX21lYW5fZGVmZW5zZV9zY29yZSwKICBkZl9zY29yZTIgPSBhd2F5X3RlYW1fbWVhbl9kZWZlbnNlX3Njb3JlLAogIGF0dF9zY29yZTEgPSBob21lX3RlYW1fbWVhbl9vZmZlbnNlX3Njb3JlLAogIGF0dF9zY29yZTIgPSBhd2F5X3RlYW1fbWVhbl9vZmZlbnNlX3Njb3JlLAogIG1mX3Njb3JlMSA9IGhvbWVfdGVhbV9tZWFuX21pZGZpZWxkX3Njb3JlLAogIG1mX3Njb3JlMiA9IGF3YXlfdGVhbV9tZWFuX21pZGZpZWxkX3Njb3JlCikKCiMgY3JlYXRlIGNvcnJlbGF0aW9uIHBsb3QKaW5wdXRfbnVtZXJpY19kYXRhICU+JQogIGNvcigpICU+JQogIGNvcnJwbG90KAogICAgdHlwZSA9ICJ1cHBlciIsCiAgICBkaWFnID0gRkFMU0UsCiAgICBjb2w9Y29sb3JSYW1wUGFsZXR0ZShjKCJmaXJlYnJpY2siLCJsaWdodHllbGxvdyIsImdyZWVuNCIpKSgxMDApLAogICAgbWV0aG9kID0gInNoYWRlIiwKICAgIHNoYWRlLmNvbCA9IE5BLAogICAgdGwuY29sID0gImJsYWNrIiwKICAgIHRsLnNydCA9IDQ1CiAgKQpgYGAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==